home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60rt.lha / Vim / vim60 / syntax / fortran.vim < prev    next >
Encoding:
Text File  |  2001-09-14  |  23.7 KB  |  510 lines

  1. " Vim syntax file
  2. " Language:    Fortran95 (and Fortran90, Fortran77, F and elf90)
  3. " Version:    0.82
  4. " Last Change:    2001 Sep 14
  5. " Maintainer:    Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
  6. " For the latest version of this file, see <http://www.unb.ca/chem/ajit/vim.htm>
  7. " For instructions on use, do :help fortran from vim
  8. " Credits:
  9. "  Some items based on the fortran syntax file by Mario Eusebio and
  10. "   Preben Guldberg, and some on suggestions by Andrej Panjkov,
  11. "   Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
  12. "   Walter Dieudonné, Alexander Wagner and Roman Bertle.
  13.  
  14. " For version 5.x: Clear all syntax items
  15. " For version 6.x: Quit if a syntax file is already loaded
  16. if version < 600
  17.   syntax clear
  18. elseif exists("b:current_syntax")
  19.   finish
  20. endif
  21.  
  22. " let b:fortran_dialect = fortran_dialect if set correctly by user
  23. if exists("fortran_dialect")
  24.   if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
  25.     let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
  26.   else
  27.     echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
  28.     let b:fortran_dialect = "unknown"
  29.   endif
  30. else
  31.   let b:fortran_dialect = "unknown"
  32. endif
  33.  
  34. " fortran_dialect not set or set incorrectly by user,
  35. if b:fortran_dialect == "unknown"
  36.   " set b:fortran_dialect from directive in first three lines of file
  37.   let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
  38.   if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
  39.     let b:fortran_dialect = "F"
  40.   elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
  41.     let b:fortran_dialect = "elf"
  42.   elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
  43.     let b:fortran_dialect = "f90"
  44.   elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
  45.     let b:fortran_dialect = "f95"
  46.   elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
  47.     let b:fortran_dialect = "f77"
  48.   else
  49.     " no directive found, so assume f95
  50.     let b:fortran_dialect = "f95"
  51.   endif
  52.   unlet b:fortran_retype
  53. endif
  54.  
  55. " Choose between fixed and free source form if this hasn't been done yet
  56. if !exists("b:fortran_fixed_source")
  57.   if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
  58.     " elf and F require free source form
  59.     let b:fortran_fixed_source = 0
  60.   elseif b:fortran_dialect == "f77"
  61.     " f77 requires fixed source form
  62.     let b:fortran_fixed_source = 1
  63.   elseif exists("fortran_free_source")
  64.     " User guarantees free source form for all f90 and f95 files
  65.     let b:fortran_fixed_source = 0
  66.   else
  67.     " f90 and f95 allow both fixed and free source form.
  68.     " Assume fixed source form unless signs of free source form
  69.     " are detected in the first five columns of the first b:lmax lines.
  70.     " Detection becomes more accurate and time-consuming if more lines
  71.     " are checked. Increase the limit below if you keep lots of comments at
  72.     " the very top of each file and you have a fast computer.
  73.     let b:lmax = 25
  74.     if ( b:lmax > line("$") )
  75.       let b:lmax = line("$")
  76.     endif
  77.     let b:fortran_fixed_source = 1
  78.     let b:ln=1
  79.     while b:ln <= b:lmax
  80.       let b:test = strpart(getline(b:ln),0,5)
  81.       if b:test[0] !~ '[Cc*!#]' && b:test !~ '^ \+[!#]' && b:test =~ '[^ 0-9\t]'
  82.     let b:fortran_fixed_source = 0
  83.     break
  84.       endif
  85.       let b:ln = b:ln + 1
  86.     endwhile
  87.     unlet b:lmax b:ln b:test
  88.   endif
  89. endif
  90.  
  91. syn case ignore
  92.  
  93. if b:fortran_dialect == "f77"
  94.   syn match fortranIdentifier        "\<\a\(\a\|\d\)*\>" contains=fortranSerialNumber
  95. else
  96.   syn match fortran90Identifier        "\<\a\w*\>" contains=fortranSerialNumber
  97.   if b:fortran_fixed_source == 1
  98.     syn match fortranConstructName    "^\s\{6,}\a\w*\s*:"
  99.   else
  100.     syn match fortranConstructName    "^\s*\a\w*\s*:"
  101.   endif
  102.   if version >= 600 && exists("fortran_more_precise")
  103.     syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*\>"
  104.     syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*\>"
  105.     syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*\>"
  106.   endif
  107. endif
  108.  
  109. syn match   fortranUnitHeader    "\<end\>"
  110.  
  111. syn keyword fortranType        character complex integer
  112. syn keyword fortranType        intrinsic
  113. syn match fortranType        "\<implicit\>"
  114. syn keyword fortranStructure    dimension
  115. syn keyword fortranStorageClass    parameter save
  116. syn match fortranUnitHeader    "\<subroutine\>"
  117. syn keyword fortranCall        call
  118. syn match fortranUnitHeader    "\<function\>"
  119. syn match fortranUnitHeader    "\<program\>"
  120. syn keyword fortranStatement    return stop
  121. syn keyword fortranConditional    else then
  122. syn match fortranConditional    "\<if\>"
  123. syn match fortranRepeat        "\<do\>"
  124.  
  125. syn keyword fortranTodo        contained todo fixme
  126.  
  127. "Catch errors caused by too many right parentheses
  128. syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup
  129. syn match  fortranParenError   ")"
  130.  
  131. syn match fortranOperator    "\.\s*n\=eqv\s*\."
  132. syn match fortranOperator    "\.\s*\(and\|or\|not\)\s*\."
  133. syn match fortranOperator    "\(+\|-\|/\|\*\)"
  134.  
  135. syn match fortranBoolean    "\.\s*\(true\|false\)\s*\."
  136.  
  137. syn keyword fortranReadWrite    backspace close inquire open rewind endfile
  138. syn keyword fortranReadWrite    read write print
  139.  
  140. "If tabs are allowed then the left margin checks do not work
  141. if exists("fortran_have_tabs")
  142.   syn match fortranTab        "\t"  transparent
  143. else
  144.   syn match fortranTab        "\t"
  145. endif
  146.  
  147. syn keyword fortranIO        unit file iostat access blank fmt form
  148. syn keyword fortranIO        recl status exist opened number named name
  149. syn keyword fortranIO        sequential direct rec
  150. syn keyword fortranIO        formatted unformatted nextrec
  151.  
  152. syn keyword fortran66Intrinsic        cabs ccos cexp clog csin csqrt
  153. syn keyword fortran66Intrinsic        dacos dasin datan datan2 dcos dcosh
  154. syn keyword fortran66Intrinsic        ddim dexp dint dlog dlog10 dmod dabs
  155. syn keyword fortran66Intrinsic        dnint dsign dsin dsinh dsqrt dtan
  156. syn keyword fortran66Intrinsic        dtanh iabs idim idnint isign idint ifix
  157. syn keyword fortran66Intrinsic        amax0 amax1 dmax1 max0 max1
  158. syn keyword fortran66Intrinsic        amin0 amin1 dmin1 min0 min1
  159. syn keyword fortran66Intrinsic        amod float sngl alog alog10
  160.  
  161. " Intrinsics provided by some vendors
  162. syn keyword fortranExtraIntrinsic    cdabs cdcos cdexp cdlog cdsin cdsqrt
  163. syn keyword fortranExtraIntrinsic    cqabs cqcos cqexp cqlog cqsin cqsqrt
  164. syn keyword fortranExtraIntrinsic    qacos qasin qatan qatan2 qcos qcosh
  165. syn keyword fortranExtraIntrinsic    qdim qexp iqint qlog qlog10 qmod qabs
  166. syn keyword fortranExtraIntrinsic    qnint qsign qsin qsinh qsqrt qtan
  167. syn keyword fortranExtraIntrinsic    qtanh qmax1 qmin1
  168. syn keyword fortranExtraIntrinsic    dimag qimag dcmplx qcmplx dconjg qconjg
  169. syn keyword fortranExtraIntrinsic    gamma dgamma qgamma algama dlgama qlgama
  170. syn keyword fortranExtraIntrinsic    erf derf qerf erfc derfc qerfc
  171. syn keyword fortranExtraIntrinsic    dfloat
  172.  
  173. syn keyword fortran77Intrinsic    abs acos aimag aint anint asin atan atan2
  174. syn keyword fortran77Intrinsic    cos sin tan sinh cosh tanh exp log log10
  175. syn keyword fortran77Intrinsic    sign sqrt int cmplx nint min max conjg
  176. syn keyword fortran77Intrinsic    char ichar index
  177. syn match fortran77Intrinsic    "\<len\s*[(,]"me=s+3
  178. syn match fortran77Intrinsic    "\<real\s*("me=s+4
  179. syn match fortranType        "\<implicit\s\+real"
  180. syn match fortranType        "^\s*real\>"
  181. syn match fortran90Intrinsic    "\<logical\s*("me=s+7
  182. syn match fortranType        "\<implicit\s\+logical"
  183. syn match fortranType        "^\s*logical\>"
  184.  
  185. "Numbers of various sorts
  186. " Integers
  187. syn match fortranNumber    display "\<\d\+\(_\a\w*\)\=\>"
  188. " floating point number, without a decimal point
  189. syn match fortranFloatNoDec    display    "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
  190. " floating point number, starting with a decimal point
  191. syn match fortranFloatIniDec    display    "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  192. " floating point number, no digits after decimal
  193. syn match fortranFloatEndDec    display    "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  194. " floating point number, D or Q exponents
  195. syn match fortranFloatDExp    display    "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  196. " floating point number
  197. syn match fortranFloat    display    "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  198. " Numbers in formats
  199. syn match fortranFormatSpec    display    "\d*f\d\+\.\d\+"
  200. syn match fortranFormatSpec    display    "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
  201. syn match fortranFormatSpec    display    "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
  202. syn match fortranFormatSpec    display    "\d\+x\>"
  203. " The next match cannot be used because it would pick up identifiers as well
  204. " syn match fortranFormatSpec    display    "\<\(a\|i\)\d\+"
  205.  
  206. " Numbers as labels
  207. syn match fortranLabelNumber    display    "^\d\{1,5}\s"me=e-1
  208. syn match fortranLabelNumber    display    "^ \d\{1,4}\s"ms=s+1,me=e-1
  209. syn match fortranLabelNumber    display    "^  \d\{1,3}\s"ms=s+2,me=e-1
  210. syn match fortranLabelNumber    display    "^   \d\d\=\s"ms=s+3,me=e-1
  211. syn match fortranLabelNumber    display    "^    \d\s"ms=s+4,me=e-1
  212.  
  213. if version >= 600 && exists("fortran_more_precise")
  214.   " Numbers as targets
  215.   syn match fortranTarget    display    "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
  216.   syn match fortranTarget    display    "\(\<do\s\+\)\@<=\d\+\>"
  217.   syn match fortranTarget    display    "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
  218. endif
  219.  
  220. syn keyword fortranTypeEx    external
  221. syn keyword fortranIOEx        format
  222. syn keyword fortranStatementEx    continue
  223. syn match fortranStatementEx    "\<go\s*to\>"
  224. syn region fortranStringEx    start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
  225. syn keyword fortran77IntrinsicEx    dim lge lgt lle llt mod
  226. syn keyword fortranStatementOb    assign pause to
  227.  
  228. if b:fortran_dialect != "f77"
  229.  
  230.   syn keyword fortranType    type none
  231.  
  232.   syn keyword fortranStructure    private public intent optional
  233.   syn keyword fortranStructure    pointer target allocatable
  234.   syn keyword fortranStorageClass    in out
  235.   syn match fortranStorageClass    "\<kind\s*="me=s+4
  236.   syn match fortranStorageClass    "\<len\s*="me=s+3
  237.  
  238.   syn match fortranUnitHeader    "\<module\>"
  239.   syn keyword fortranUnitHeader    use only contains
  240.   syn keyword fortranUnitHeader    recursive result interface operator
  241.   syn keyword fortranStatement    allocate deallocate nullify cycle exit
  242.   syn match fortranConditional    "\<select\>"
  243.   syn keyword fortranConditional    case default where elsewhere
  244.  
  245.   syn match fortranOperator    "\(\(>\|<\)=\=\|==\|/=\|=\)"
  246.   syn match fortranOperator    "=>"
  247.  
  248.   syn region fortranString    start=+"+ end=+"+    contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
  249.   syn keyword fortranIO        pad position action delim readwrite
  250.   syn keyword fortranIO        eor advance nml
  251.  
  252.   syn keyword fortran90Intrinsic    adjustl adjustr all allocated any
  253.   syn keyword fortran90Intrinsic    associated bit_size btest ceiling
  254.   syn keyword fortran90Intrinsic    count cshift date_and_time
  255.   syn keyword fortran90Intrinsic    digits dot_product eoshift epsilon exponent
  256.   syn keyword fortran90Intrinsic    floor fraction huge iand ibclr ibits ibset ieor
  257.   syn keyword fortran90Intrinsic    ior ishft ishftc lbound len_trim
  258.   syn keyword fortran90Intrinsic    matmul maxexponent maxloc maxval merge
  259.   syn keyword fortran90Intrinsic    minexponent minloc minval modulo mvbits nearest
  260.   syn keyword fortran90Intrinsic    pack present product radix random_number
  261.   syn match fortran90Intrinsic        "\<not\>\(\s*\.\)\@!"me=s+3
  262.   syn keyword fortran90Intrinsic    random_seed range repeat reshape rrspacing scale
  263.   syn keyword fortran90Intrinsic    selected_int_kind selected_real_kind scan
  264.   syn keyword fortran90Intrinsic    shape size spacing spread set_exponent
  265.   syn keyword fortran90Intrinsic    tiny transpose trim ubound unpack verify
  266.   syn keyword fortran90Intrinsic    precision sum system_clock
  267.   syn match fortran90Intrinsic    "\<kind\>\s*[(,]"me=s+4
  268.  
  269.   syn match  fortranUnitHeader    "\<end\s*function"
  270.   syn match  fortranUnitHeader    "\<end\s*interface"
  271.   syn match  fortranUnitHeader    "\<end\s*module"
  272.   syn match  fortranUnitHeader    "\<end\s*program"
  273.   syn match  fortranUnitHeader    "\<end\s*subroutine"
  274.   syn match  fortranRepeat    "\<end\s*do"
  275.   syn match  fortranConditional    "\<end\s*where"
  276.   syn match  fortranConditional    "\<select\s*case"
  277.   syn match  fortranConditional    "\<end\s*select"
  278.   syn match  fortranType    "\<end\s*type"
  279.   syn match  fortranType    "\<in\s*out"
  280.  
  281.   syn keyword fortranUnitHeaderEx    procedure
  282.   syn keyword fortranIOEx        namelist
  283.   syn keyword fortranConditionalEx    while
  284.   syn keyword fortran90IntrinsicEx    achar iachar transfer
  285.  
  286.   syn keyword fortranInclude        include
  287.   syn keyword fortran90StorageClassR    sequence
  288. endif
  289.  
  290. syn match   fortranConditional    "\<end\s*if"
  291. syn match   fortranIO        contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
  292. syn match   fortranConditional    "\<else\s*if"
  293.  
  294. syn keyword fortranUnitHeaderR    entry
  295. syn match fortranTypeR        display "double\s\+precision"
  296. syn match fortranTypeR        display "double\s\+complex"
  297. syn match fortranUnitHeaderR    display "block\s\+data"
  298. syn keyword fortranStorageClassR    common equivalence data
  299. syn keyword fortran77IntrinsicR    dble dprod
  300. syn match   fortran77OperatorR    "\.\s*[gl][et]\s*\."
  301. syn match   fortran77OperatorR    "\.\s*\(eq\|ne\)\s*\."
  302.  
  303. if b:fortran_dialect == "f95"
  304.   syn keyword fortranRepeat        forall
  305.   syn match fortranRepeat        "\<end\s*forall"
  306.   syn keyword fortran95Intrinsic    null cpu_time
  307.   syn keyword fortranType        elemental pure
  308.   if exists("fortran_more_precise")
  309.     syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
  310.   endif
  311. endif
  312.  
  313. syn cluster fortranCommentGroup contains=fortranTodo
  314.  
  315. if (b:fortran_fixed_source == 1)
  316.   if !exists("fortran_have_tabs")
  317.     "Flag items beyond column 72
  318.     syn match fortranSerialNumber    excludenl "^.\{73,}$"lc=72
  319.     "Flag left margin errors
  320.     syn match fortranLabelError    "^.\{-,4}[^0-9 ]" contains=fortranTab
  321.     syn match fortranLabelError    "^.\{4}\d\S"
  322.   endif
  323.   syn match fortranComment        excludenl "^[!c*].*$" contains=@fortranCommentGroup
  324.   syn match fortranLeftMargin        transparent "^ \{5}"
  325.   syn match fortranContinueMark        display "^.\{5}\S"lc=5
  326. else
  327.   syn match fortranContinueMark        display "&"
  328. endif
  329.  
  330. if b:fortran_dialect != "f77"
  331.   syn match fortranComment    excludenl "!.*$" contains=@fortranCommentGroup
  332. endif
  333.  
  334. "cpp is often used with Fortran
  335. syn match    cPreProc        "^\s*#\s*\(define\|ifdef\)\>.*"
  336. syn match    cPreProc        "^\s*#\s*\(elif\|if\)\>.*"
  337. syn match    cPreProc        "^\s*#\s*\(ifndef\|undef\)\>.*"
  338. syn match    cPreCondit        "^\s*#\s*\(else\|endif\)\>.*"
  339. syn region    cIncluded    contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
  340. syn match    cIncluded        contained "<[^>]*>"
  341. syn match    cInclude        "^\s*#\s*include\>\s*["<]" contains=cIncluded
  342.  
  343. "Synchronising limits assume that comment and continuation lines are not mixed
  344. if (b:fortran_fixed_source == 0)
  345.   syn sync linecont "&" maxlines=40
  346. else
  347.   syn sync minlines=20
  348. endif
  349.  
  350. if version >= 600 && exists("fortran_fold")
  351.  
  352.   syn sync fromstart
  353.   if (b:fortran_fixed_source == 1)
  354.     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
  355.     syn region fortranModule transparent fold keepend start="^\s*module\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
  356.     syn region fortranFunction transparent fold keepend extend start="^\s*function\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  357.     syn region fortranSubroutine transparent fold keepend extend start="^\s*subroutine\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  358.     syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop
  359.   else
  360.     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
  361.     syn region fortranModule transparent fold keepend start="^\s*module\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
  362.     syn region fortranFunction transparent fold keepend extend start="^\s*function\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  363.     syn region fortranSubroutine transparent fold keepend extend start="^\s*subroutine\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  364.     syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop
  365.   endif
  366.  
  367.   if exists("fortran_fold_conditionals")
  368.     if (b:fortran_fixed_source == 1)
  369.       syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  370.       syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  371.       syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  372.       syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  373.     else
  374.       syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  375.       syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\s*[!#].*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  376.       syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  377.       syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  378.     endif
  379.   endif
  380.  
  381.   if exists("fortran_fold_multilinecomments")
  382.     if (b:fortran_fixed_source == 1)
  383.       syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
  384.     else
  385.       syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
  386.     endif
  387.   endif
  388. endif
  389.  
  390. " Define the default highlighting.
  391. " For version 5.7 and earlier: only when not done already
  392. " For version 5.8 and later: only when an item doesn't have highlighting yet
  393. if version >= 508 || !exists("did_fortran_syn_inits")
  394.   if version < 508
  395.     let did_fortran_syn_inits = 1
  396.     command -nargs=+ HiLink hi link <args>
  397.   else
  398.     command -nargs=+ HiLink hi def link <args>
  399.   endif
  400.  
  401.   " The default highlighting differs for each dialect.
  402.   " Transparent groups:
  403.   " fortranParen, fortranLeftMargin
  404.   " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
  405.   " fortranBlockData
  406.   " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
  407.   " fortranMultiCommentLines
  408.   HiLink fortranStatement        Statement
  409.   HiLink fortranConstructName    Special
  410.   HiLink fortranConditional        Conditional
  411.   HiLink fortranRepeat        Repeat
  412.   HiLink fortranTodo            Todo
  413.   HiLink fortranContinueMark        Todo
  414.   HiLink fortranString        String
  415.   HiLink fortranNumber        Number
  416.   HiLink fortranOperator        Operator
  417.   HiLink fortranBoolean        Boolean
  418.   HiLink fortranLabelError        Error
  419.   HiLink fortranObsolete        Todo
  420.   HiLink fortranType            Type
  421.   HiLink fortranStructure        Type
  422.   HiLink fortranStorageClass        StorageClass
  423.   HiLink fortranCall            fortranUnitHeader
  424.   HiLink fortranUnitHeader        fortranPreCondit
  425.   HiLink fortranReadWrite        fortran90Intrinsic
  426.   HiLink fortranIO            fortran90Intrinsic
  427.   HiLink fortran95Intrinsic        fortran90Intrinsic
  428.   HiLink fortran77Intrinsic        fortran90Intrinsic
  429.   HiLink fortran90Intrinsic        Special
  430.  
  431.   if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
  432.     HiLink fortranStatementOb    fortranObsolete
  433.     HiLink fortran66Intrinsic    fortranObsolete
  434.     HiLink fortran77IntrinsicR    fortranObsolete
  435.     HiLink fortranUnitHeaderR    fortranObsolete
  436.     HiLink fortranTypeR        fortranObsolete
  437.     HiLink fortranStorageClassR    fortranObsolete
  438.     HiLink fortran90StorageClassR    fortranObsolete
  439.     HiLink fortran77OperatorR    fortranObsolete
  440.     HiLink fortranInclude        fortranObsolete
  441.   else
  442.     HiLink fortranStatementOb    Statement
  443.     HiLink fortran66Intrinsic    fortran90Intrinsic
  444.     HiLink fortran77IntrinsicR    fortran90Intrinsic
  445.     HiLink fortranUnitHeaderR    fortranPreCondit
  446.     HiLink fortranTypeR        fortranType
  447.     HiLink fortranStorageClassR    fortranStorageClass
  448.     HiLink fortran77OperatorR    fortranOperator
  449.     HiLink fortranInclude        Include
  450.     HiLink fortran90StorageClassR    fortranStorageClass
  451.   endif
  452.  
  453.   if ( b:fortran_dialect == "F" )
  454.     HiLink fortranLabelNumber    fortranObsolete
  455.     HiLink fortranTarget        fortranObsolete
  456.     HiLink fortranFormatSpec        fortranObsolete
  457.     HiLink fortranFloatDExp        fortranObsolete
  458.     HiLink fortranFloatNoDec        fortranObsolete
  459.     HiLink fortranFloatIniDec    fortranObsolete
  460.     HiLink fortranFloatEndDec    fortranObsolete
  461.     HiLink fortranTypeEx        fortranObsolete
  462.     HiLink fortranIOEx        fortranObsolete
  463.     HiLink fortranStatementEx    fortranObsolete
  464.     HiLink fortranStringEx        fortranObsolete
  465.     HiLink fortran77IntrinsicEx    fortranObsolete
  466.     HiLink fortranUnitHeaderEx    fortranObsolete
  467.     HiLink fortranConditionalEx    fortranObsolete
  468.     HiLink fortran90IntrinsicEx    fortranObsolete
  469.   else
  470.     HiLink fortranLabelNumber    Special
  471.     HiLink fortranTarget        Special
  472.     HiLink fortranFormatSpec        Identifier
  473.     HiLink fortranFloatDExp        fortranFloat
  474.     HiLink fortranFloatNoDec        fortranFloat
  475.     HiLink fortranFloatIniDec    fortranFloat
  476.     HiLink fortranFloatEndDec    fortranFloat
  477.     HiLink fortranTypeEx        fortranType
  478.     HiLink fortranIOEx        fortranIO
  479.     HiLink fortranStatementEx    fortranStatement
  480.     HiLink fortranStringEx        fortranString
  481.     HiLink fortran77IntrinsicEx    fortran90Intrinsic
  482.     HiLink fortranUnitHeaderEx    fortranUnitHeader
  483.     HiLink fortranConditionalEx    fortranConditional
  484.     HiLink fortran90IntrinsicEx    fortran90Intrinsic
  485.   endif
  486.  
  487.   HiLink fortranFloat        Float
  488.   HiLink fortran90Identifier        fortranIdentifier
  489.   "Uncomment the next line if you want all fortran variables to be highlighted
  490.   "HiLink fortranIdentifier        Identifier
  491.   HiLink fortranPreCondit        PreCondit
  492.   HiLink fortranInclude        Include
  493.   HiLink cIncluded            fortranString
  494.   HiLink cInclude            Include
  495.   HiLink cPreProc            PreProc
  496.   HiLink cPreCondit            PreCondit
  497.   HiLink fortranParenError        Error
  498.   HiLink fortranComment        Comment
  499.   HiLink fortranSerialNumber        Todo
  500.   HiLink fortranTab            Error
  501.   " Vendor extensions
  502.   HiLink fortranExtraIntrinsic    Special
  503.  
  504.   delcommand HiLink
  505. endif
  506.  
  507. let b:current_syntax = "fortran"
  508.  
  509. " vim: ts=8 tw=132
  510.